home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 03 - 1987 / 03.09 Sep 87 / kelly basic source / Inside Mac Sample1.BAS next >
Encoding:
BASIC Source File  |  1987-07-20  |  3.9 KB  |  180 lines  |  [TEXT/ZBAS]

  1. REM Sample Demo (adapted from Inside Macintosh)
  2. REM ©MacTutor 1987
  3. REM By Dave Kelly
  4.  
  5. WINDOW OFF
  6. COORDINATE WINDOW
  7. DEF MOUSE=-1
  8. TEXT 3,12,0,0
  9. everyevent=-1:REM ALL events
  10. False=0:True=NOT False:doneflag=False
  11. REM Setup the EventRecord
  12. myEvent%=0:REM 'what' is first variable
  13. message&=0
  14. when&=0
  15. where&=0
  16. modifiers=0
  17. applemark=&H14
  18. whichwindow&=0
  19. DIM Rect%(3)
  20. charCodeMask&=VAL("&H000000FF")
  21. keyCodeMask&= VAL("&H0000FF00")
  22. FLUSHEVENTS
  23. GOSUB "SetUpMenus"
  24. WMgrPort&=PEEK LONG(&H9DE)
  25. Device=PEEK WORD(WMgrPort&)
  26. baseAddr&=PEEK LONG(WMgrPort&+2)
  27. RowBytes=PEEK WORD(WMgrPort&+6)
  28. PortRecttop=PEEK WORD(WMgrPort&+8)
  29. PortRectleft=PEEK WORD(WMgrPort&+10)
  30. PortRectbottom=PEEK WORD(WMgrPort&+12)
  31. PortRectright=PEEK WORD(WMgrPort&+14)
  32. dragtop=PortRecttop+24
  33. dragleft=PortRectleft+4
  34. dragbottom=PortRectbottom-4
  35. dragright=PortRectright-4
  36.  
  37. WINDOW 1,"Sample Window",(dragleft,dragtop+20)-(dragright-4,dragbottom-4),257
  38. myWindow&=WINDOW(14)
  39. CALL SETPORT(myWindow&)
  40. GET WINDOW #1,GrfPtr&
  41. txRect1&=PEEK LONG(GrfPtr&+16)
  42. txRect2&=PEEK LONG(GrfPtr&+20)
  43. CALL INSETRECT(txRect1&,4,2)
  44. textH&=FN TENEW(txRect1&,txRect1&)
  45.  
  46. "EventLoop": REM Main Event Loop
  47. DO
  48. CALL SYSTEMTASK
  49. CALL TEIDLE(textH&)
  50. CALL SETRECT(Rect%(0),PEEK WORD (GrfPtr&+16),PEEK WORD (GrfPtr&+18),PEEK WORD (GrfPtr&+20),PEEK WORD (GrfPtr&+22))
  51. click=MOUSE(0):xpos=MOUSE(1):ypos=MOUSE(2)
  52. InRectangle=FN PTINRECT(xpos,Rect%(0))
  53. IF InRectangle THEN CURSOR 1 ELSE CURSOR 0
  54. LONG IF FN GETNEXTEVENT(everyevent,myEvent%)
  55. SELECT myEvent%
  56. CASE 0    :REM No Event
  57. CASE 1    :REM mousedown
  58. wResult=FN FINDWINDOW(where&,whichwindow&)
  59. SELECT wResult
  60. CASE 0    :REM inDesk (do nothing)
  61. CASE 1    :REM inMenuBar
  62. mResult&=FN MENUSELECT(where&)
  63. GOSUB "DoCommand"
  64. CASE 2    :REM inSysWindow
  65. CALL SYSTEMCLICK(myEvent%,whichwindow&)
  66. CASE 3    :REM inContent
  67. LONG IF whichwindow& <> FN FRONTWINDOW
  68. CALL SELECTWINDOW(whichwindow&)
  69. XELSE
  70. CALL GLOBALTOLOCAL(where&)
  71. boolean=FN BITAND(modifiers,512)<>0
  72. CALL TECLICK(where&,boolean,textH&)
  73. END IF
  74. CASE 4    :REM inDrag
  75. LONG IF whichwindow&<>FN FRONTWINDOW
  76. CALL SELECTWINDOW(whichwindow&)
  77. XELSE
  78. CALL DRAGWINDOW(whichwindow&, where&,dragtop)
  79. END IF
  80.  
  81. CASE 5    :REM inGrow
  82. CASE 6    :REM inGoAway
  83. END SELECT
  84. CASE 2    :REM mouseup
  85. CASE 3,5    :REM keydown or autokey
  86. theChar&=FN BITAND(message&,charCodeMask&)
  87. LONG IF FN BITAND(modifiers,256)<>0
  88. mResult&=FN MENUKEY(theChar&)
  89. GOSUB "DoCommand"
  90. XELSE
  91. CALL TEKEY(theChar&,textH&)
  92. END IF
  93. CASE 4    :REM keyup
  94. CASE 6    :REM updateEvt
  95. CALL BEGINUPDATE(message&)
  96. CALL ERASERECT(txRect1&)
  97. CALL TEUPDATE(txRect1&,textH&)
  98. CALL ENDUPDATE(message&)
  99. CASE 7    :REM diskEvt
  100. CASE 8    :REM activateEvt
  101. LONG IF FN BITAND(modifiers,1)<>0
  102. CALL TEACTIVATE(textH&)
  103. CALL DISABLEITEM(Mhndl2&,1)
  104. XELSE
  105. CALL TEDEACTIVATE(textH&)
  106. CALL ENABLEITEM(Mhndl2&,1)
  107. END IF
  108. CASE 10    :REM networkEvt
  109. CASE 11    :REM driverEvt
  110. CASE 12    :REM app1Evt
  111. CASE 13    :REM app2Evt
  112. CASE 14    :REM app3Evt
  113. CASE 15    :REM app4Evt
  114. CASE ELSE
  115. END SELECT
  116. END IF
  117. UNTIL doneflag
  118. END
  119. "SetUpMenus"
  120. APPLE MENU "About Sample"
  121. MENU 1,0,1,"File"
  122. MENU 1,1,1,"Quit/Q"
  123. Mhndl1&=FN GETMHANDLE(1)
  124. EDIT MENU 2
  125. Mhndl2&=FN GETMHANDLE(130)
  126. Mhndl0&=FN GETMHANDLE(255)
  127. RETURN
  128. "DoCommand"
  129. theMenu=FN HIWORD(mResult&)
  130. theItem=FN LOWORD(mResult&)
  131. SELECT theMenu
  132. CASE 255
  133. GOSUB "appleID"
  134. CASE 1
  135. GOSUB "fileID"
  136. CASE 2
  137. GOSUB "editID"
  138. END SELECT
  139. CALL HILITEMENU(0)
  140. RETURN
  141. "appleID"
  142. LONG IF theItem=1
  143. WINDOW 5,"",(100,100)-(400,250),-2
  144. TEXT 0,12,0,0
  145. PRINT @(2,2)"Sample adapted from Inside Macintosh"
  146. PRINT @(10,3)"by"
  147. PRINT @(8,4)"Dave Kelly"
  148. PRINT @(6,5)"©MacTutor, 1987"
  149. MOUSE ON
  150. DO
  151. x=MOUSE(0)
  152. outsiderect=(MOUSE(1)<0 OR MOUSE(1)>300 OR MOUSE(2)<0 OR MOUSE(2)>150)
  153. UNTIL x<>0 AND NOT (outsiderect)
  154. MOUSE OFF
  155. WINDOW CLOSE 5
  156. XELSE
  157. CALL GETITEM(Mhndl0&,theItem,Var$)
  158. mrefNum=FN OPENDESKACC(Var$)
  159. CALL SETPORT(myWindow&)
  160. END IF
  161. RETURN
  162. "fileID"
  163. doneflag=True
  164. RETURN
  165. "editID"
  166. LONG IF NOT FN SYSTEMEDIT(theItem-1)
  167. SELECT theItem
  168. CASE 1:REM undo command
  169. CASE 3:REM cut command
  170. CALL TECUT(textH&)
  171. CASE 4:REM copy command
  172. CALL TECOPY(textH&)
  173. CASE 5:REM paste command
  174. CALL TEPASTE(textH&)
  175. CASE 6:REM clear command
  176. CALL TEDELETE(textH&)
  177. END SELECT
  178. END IF
  179. RETURN
  180.